#include <iostream>
#include <sstream>
#include <string>
#include <jsoncpp/json/json.h>
std::string Serialize()
{
    // 将数据储存到Json::Value对象中
    Json::Value root;
    root["姓名"] = "小美";
    root["年龄"] = 18;
    root["成绩"].append(99.6);
    root["成绩"].append(98);
    root["成绩"].append(47.2);
    // 实例化出StreamWriterBuilder工厂类对象
    Json::StreamWriterBuilder swb;
    // 生成StreanWwriter对象
    Json::StreamWriter *sw = swb.newStreamWriter();
    // 对Json::Value对象反序列化
    std::stringstream ret;
    sw->write(root, &ret);
    std::cout << ret.str() << std::endl;
    delete sw;
    return ret.str();
}
void UnSerialize(std::string &str)
{
    //创建Json::Value储存数据
    Json::Value root;
    //创建CharReaderBuilder工程类对象
    Json::CharReaderBuilder crb;
    //生成CharReader对象
    Json::CharReader* cr = crb.newCharReader();
    //把字符数据转化成Json::Value
    bool f = cr->parse(str.c_str(),str.c_str()+str.size(),&root,nullptr);
    if(!f)
    {
        std::cout<<"parse fail"<<std::endl;
    }
    //输出数据
    std::cout<<"姓名:"<<root["姓名"].asCString()<<std::endl;
    std::cout<<"年龄:"<<root["年龄"].asInt()<<std::endl;
    for(int i=0;i<root["成绩"].size();i++)
    {
        std::cout<<"成绩:"<<root["成绩"][i].asFloat()<<std::endl;
    }
    delete cr;
}
int main()
{
    std::string str = Serialize();
    UnSerialize(str);
    return 0;
}